package org.example.study7;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class ProducerConsumerModel {
    public static void main(String[] args) throws InterruptedException {
        // 创建容量为3的阻塞队列
        BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);

        // 生产者线程
        Thread producer = new Thread(() -> {
            try {
                for (int i = 1; i <= 5; i++) {
                    queue.put(i); // 阻塞插入
                    System.out.println("生产: " + i);
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        // 消费者线程
        Thread consumer = new Thread(() -> {
            try {
                for (int i = 0; i < 5; i++) {
                    int item = queue.take(); // 阻塞获取
                    System.out.println("消费: " + item);
                    Thread.sleep(2000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        producer.start();
        consumer.start();
        producer.join(); // 等待生产者结束
        consumer.join(); // 等待消费者结束
    }
}
/*运行输出可能如下：
生产: 1
消费: 1
生产: 2
生产: 3   // 队列满，生产者暂停
消费: 2   // 消费者取出2，队列空出位置
生产: 4
消费: 3
生产: 5
消费: 4
消费: 5*/